package com.demo2do.boyle.common.handler.impl;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

import org.springframework.stereotype.Component;

import com.demo2do.boyle.common.handler.XinxiSmsHandler;
import com.demo2do.core.entity.Result;
import com.demo2do.core.utils.StringUtils;

/**
 * 
 * @author Jason.Y
 */
@Component("xinxiSmsHandler")
public class XinxiSmsHandlerImpl implements XinxiSmsHandler {

    private String url;
    
    private String name;

    private String password;
    
    private String mobiles;
    
    private String content = "";
    
    private String sign;
    
	public String getUrl() {
		return url;
	}

	public String getName() {
		return name;
	}

	public String getPassword() {
		return password;
	}

	public String getMobiles() {
		return mobiles;
	}

	public String getContent() {
		return content;
	}

	public String getSign() {
		return sign;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public void setMobiles(String mobiles) {
		this.mobiles = mobiles;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public void setSign(String sign) {
		this.sign = sign;
	}

	/**
	 * @param args
	 * @throws IOException
	 */
	public Result sendMessage() throws IOException {
		
		Result result = new Result();
		//发送内容
		//String content = "第一信息 JAVA示例测试"; 
		//String sign="签名";
		
		// 创建StringBuffer对象用来操作字符串
		//StringBuffer sb = new StringBuffer("http://sms.1xinxi.cn/asmx/smsservice.aspx");
		StringBuffer sb = new StringBuffer(this.url);

		// 向StringBuffer追加用户名
		sb.append("?name="+this.name);

		// 向StringBuffer追加密码（登陆网页版，在管理中心--基本资料--接口密码，是28位的）
		sb.append("&pwd="+this.password);

		// 向StringBuffer追加手机号码
		sb.append("&mobile="+this.mobiles);

		// 向StringBuffer追加消息内容转URL标准码
		sb.append("&content="+URLEncoder.encode(this.content,"UTF-8"));
		
		//追加发送时间，可为空，为空为及时发送
		sb.append("&stime=");
		
		//加签名
		sb.append("&sign="+URLEncoder.encode(StringUtils.isEmpty(this.sign)?"":this.sign,"UTF-8"));
		
		//type为固定值pt  extno为扩展码，必须为数字 可为空
		sb.append("&type=pt&extno=");
		// 创建url对象
		//String temp = new String(sb.toString().getBytes("GBK"),"UTF-8");
		System.out.println("sb:"+sb.toString());
		URL url = new URL(sb.toString());

		// 打开url连接
		HttpURLConnection connection = (HttpURLConnection) url.openConnection();

		// 设置url请求方式 ‘get’ 或者 ‘post’
		connection.setRequestMethod("POST");

		// 发送
		InputStream is =url.openStream();

		//转换返回值
		String returnStr = XinxiSmsHandlerImpl.convertStreamToString(is);
		
		// 返回结果为‘0，20140009090990,1，提交成功’ 发送成功   具体见说明文档
		System.out.println(returnStr);
		// 返回发送结果
		if(Integer.valueOf(returnStr.split(",")[0]).intValue() == 0){
			result.success().message("发送成功！");
		}else if(Integer.valueOf(returnStr.split(",")[0]).intValue() == 1){
			result.success().message("内容含有敏感词汇!");
		}else if(Integer.valueOf(returnStr.split(",")[0]).intValue() == 2){
			result.success().message("账户余额不足!");
		}else if(Integer.valueOf(returnStr.split(",")[0]).intValue() == 3){
			result.success().message("没有发送号码!");
		}else if(Integer.valueOf(returnStr.split(",")[0]).intValue() == 4){
			result.success().message("包含sql语句!");
		}else if(Integer.valueOf(returnStr.split(",")[0]).intValue() == 10){
			result.success().message("账号不存在!");
		}else if(Integer.valueOf(returnStr.split(",")[0]).intValue() == 11){
			result.success().message("账号注销!");
		}else if(Integer.valueOf(returnStr.split(",")[0]).intValue() == 12){
			result.success().message("账号停用!");
		}else if(Integer.valueOf(returnStr.split(",")[0]).intValue() == 13){
			result.success().message("IP鉴权失败!");
		}else if(Integer.valueOf(returnStr.split(",")[0]).intValue() == 14){
			result.success().message("格式错误!");
		}else if(Integer.valueOf(returnStr.split(",")[0]).intValue() == -1){
			result.success().message("系统异常!");
		}
		
		return result;
	}
	
	/**
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		//发送内容
		String content = "【圈圈族】您好，您的微信（微博）账号截图上传错误，请进入“个人中心”->“社交账号”下按要求重新上传，以便尽快完成审核并领取任务。"; 
		String sign="";
		
		// 创建StringBuffer对象用来操作字符串
		StringBuffer sb = new StringBuffer("http://sms.1xinxi.cn/asmx/smsservice.aspx?");

		// 向StringBuffer追加用户名
		sb.append("name=13636302870");

		// 向StringBuffer追加密码（登陆网页版，在管理中心--基本资料--接口密码，是28位的）
		sb.append("&pwd=C981958E58A53610477A75870C8F");

		// 向StringBuffer追加手机号码
		sb.append("&mobile=15692131937");

		// 向StringBuffer追加消息内容转URL标准码
		sb.append("&content="+URLEncoder.encode(content,"UTF-8"));
		
		//追加发送时间，可为空，为空为及时发送
		sb.append("&stime=");
		
		//加签名
		sb.append("&sign="+URLEncoder.encode(sign,"UTF-8"));
		
		//type为固定值pt  extno为扩展码，必须为数字 可为空
		sb.append("&type=pt&extno=");
		// 创建url对象
		//String temp = new String(sb.toString().getBytes("GBK"),"UTF-8");
		System.out.println("sb:"+sb.toString());
		URL url = new URL(sb.toString());

		// 打开url连接
		HttpURLConnection connection = (HttpURLConnection) url.openConnection();

		// 设置url请求方式 ‘get’ 或者 ‘post’
		connection.setRequestMethod("POST");

		// 发送
		InputStream is =url.openStream();

		//转换返回值
		String returnStr = XinxiSmsHandlerImpl.convertStreamToString(is);
		
		// 返回结果为‘0，20140009090990,1，提交成功’ 发送成功   具体见说明文档
		System.out.println(returnStr);
		// 返回发送结果
		

	}
	/**
	 * 转换返回值类型为UTF-8格式.
	 * @param is
	 * @return
	 */
	public static String convertStreamToString(InputStream is) {    
        StringBuilder sb1 = new StringBuilder();    
        byte[] bytes = new byte[4096];  
        int size = 0;  
        
        try {    
        	while ((size = is.read(bytes)) > 0) {  
                String str = new String(bytes, 0, size, "UTF-8");  
                sb1.append(str);  
            }  
        } catch (IOException e) {    
            e.printStackTrace();    
        } finally {    
            try {    
                is.close();    
            } catch (IOException e) {    
               e.printStackTrace();    
            }    
        }    
        return sb1.toString();    
    }
}
